package top.infopub.mgr.bpa.dao;


import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Param;
import top.infopub.generic.GenericDao;
import top.infopub.mgr.bpa.domain.SubpackCotDomain;
import top.infopub.mgr.bpa.domain.SubpackLedgerDomain;
import top.infopub.mgr.bpa.vo.ContractManageVo;
import top.infopub.mgr.bpa.vo.SubpackCotVo;
import top.infopub.model.bpa.SubpackCot;
import top.infopub.model.bpa.SubpackCotList;

import java.math.BigDecimal;
import java.util.List;


/** 分包合同(BPA_SUBPACK_COT) **/
public interface SubpackCotDao extends GenericDao<SubpackCot, String> {

    /**
     * 根据条件查询分包合同记录
     * @param subpackCotVo
     * @return 
     * @see
     */
    Page<SubpackCotDomain> selectByDomainWhere(SubpackCotVo subpackCotVo);

    /**
     * 分包合同台账
     * @param contractManageVo
     * @return
     * @see
     */
    Page<SubpackLedgerDomain> selectByLedger(ContractManageVo contractManageVo);

    /**
     * 根据条件查询分包合同记录--我审批的列表
     * @param SubpackCotVo
     * @return 
     * @see
     */
    Page<SubpackCotDomain> selectMyCheckByDomainWhere(SubpackCotVo subpackCotVo);

    /**
     * 根据项目编号查询分包合同记录
     * @param proCode 项目编号
     * @return 
     * @see
     */
    List<SubpackCotDomain> selectByProCode(String proCode);

    /**
     * 判断是否存在相同名称的分包合同名称
     */
    List<SubpackCot> isExistSubpackCotName(@Param("subpackCotName") String subpackCotName,
                                     @Param("proCode") String proCode);

    /**
     * 判断是否存在相同名称的分包合同补充协议名称
     */
    List<SubpackCot> isExistSubpackCotSaName(@Param("subpackCotSaName") String subpackCotSaName,
                                       @Param("proCode") String proCode);

    /**
     * 添加-分包合同
     */
    void insertById(SubpackCot subpackCot);

    /**
     * 返回分包合同中的项目
     */
    List<SubpackCot> selectSubpackCot(@Param("visibleProCodes") String visibleProCodes);

    /**
     * 根据分包合同中的项目编号查询最新版分包合同信息
     */
    SubpackCotDomain selectBySubpackCotVersionProCode(@Param("proCode") String proCode);

    /**
     * 根据分包合同项目编号查询相关带入信息(原合同id)
     */
    SubpackCot selectByProCodes(@Param("proCode") String proCode);

    /**
     * 根据分包合同中的项目编号查询最新版本号
     */
    SubpackCot selectVersionNoByProCode(@Param("proCode") String proCode);

    /**
     * 根据合同名称计算对内结算中的 期数(已审批通过)
     */
    int countByName(@Param("names") String names);

    /**
     * 详情页
     */
    SubpackCotVo queryById(String id);

    /**
     * 根据父关联id查询最新的记录
     */
    SubpackCotDomain selectByRefId(String refId);

    /**
     * 根据id查询数据
     */
    SubpackCotDomain selectById(String id);

    /**
     * 原总包合同范围内金额(下浮前)(合计)
     */
    BigDecimal sumPreScopeFee(String proCode);

    /**
     * 原总包合同范围内金额(下浮后)(合计)
     */
    BigDecimal sumAfterScopeFee(String proCode);

    List<SubpackCotList> selectSup(String id);

    void insertBatchCotList(List<SubpackCotList> cotLists);
}
